GitHub Actionsでビルド済みファイルを添付したリリースを自動生成するようにした
Mijikko.icon from 2023/03/11
初めてGitHub Actionsをまともにいじったかも
https://gyazo.com/0d2d0cd7f1ac009bfd404480bf81f9d2 https://gyazo.com/27129375124c2b5ab2ae69ce40a50a6e
releaseブランチへ出したPRがマージされると、自動的にビルド済みファイルを添付したリリースを作成するようにした
これ作ったことないtakker.icon
腰が重くて……
簡単に作れるのかな?
井戸端民は当たり前にやっているけれど、自分にとってはまあまあな進歩
序盤調べるのがめんどくさかっただけで、意外とLinuxの知識だけでどうにかなるものなんだなーって気がした
とりあえず、作ったworkflowファイルを貼っておきますMijikko.icon
https://code2svg.vercel.app/svg/https://raw.githubusercontent.com/MijinkoSD/decorate_on_stdout/0.1.0/.github/workflows/create-release.yml#.jpg https://github.com/MijinkoSD/decorate_on_stdout/blob/0.1.0/.github/workflows/create-release.yml
#create-release.yml
Actionsページに表示される名前
code:create-release.yml
name: Create Release
Actionsの実行条件
code:create-release.yml
on:
pull_request:
types: closed
branches:
- release
Actionsの実行内容
code:create-release.yml
jobs:
ジョブの名前(create_release)
code:create-release.yml
create_release:
最新版のUbuntu仮想環境上でジョブを実行する
code:create-release.yml
runs-on: ubuntu-latest
後に使用するsecrets.GITHUB_TOKENの権限
権限の種類についてはこのページを参照
secretsとは書いてあるが、GITHUB_TOKENはデフォルトで存在しているので、リポジトリのsecrets設定をいじる必要はない
code:create-release.yml
permissions:
contents: write
ジョブの詳細な実行内容
code:create-release.yml
steps:
よくわかんないけれど、チェックアウトしないと動かない
そういうものなので、一々調べてはいないし、きっと詳しい誰かが追記してくれる
actions/checkouthttps://github.com/actions/checkoutを使用している
code:create-release.yml
- name: Checkout code
uses: actions/checkout@v3
PythonをUbuntu仮想環境上に導入する
actions/setup-pythonhttps://github.com/actions/setup-pythonを使用している
code:create-release.yml
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: "3.10"
3.10使っているけれど、自分の開発環境は3.11なんだよなぁ
使えそうだったら直しておくか
Pythonのパッケージをインストール
code:create-release.yml
- name: Install dependencies
run: |
python -m pip install -U pip
pip install build setuptools
runにはUbuntu上で実行するコマンドをそのまま書く
run:の直後に|を書いた後、複数行のコマンドを改行区切りで書けば、それぞれのコマンドを順番に実行してくれる
必要あるかはわからないけれど、調べた感じどのサイトでもpip install -U pipを実行しているので、やった方が良いと思った
今回はパッケージをビルドするbuildhttps://pypi.org/project/build/と、pyproject.toml内で使用しているsetuptoolshttps://pypi.org/project/setuptools/が必要だったので、それらをインストールしてある
パッケージをビルドする
code:create-release.yml
- name: Build package
run: python -m build
ビルド済みのファイルは./dist/内に保存される
リリースを作成する
古来より親しまれてきたactions/create-releasehttps://github.com/actions/create-releaseやactions/upload-release-assethttps://github.com/actions/upload-release-assetは既にアーカイブされている
なので、代わりにsoftprops/actions-gh-releasehttps://github.com/softprops/action-gh-releaseを利用する
こっちは、リリースの作成とassetの添付の両方を一度にこなすことができる
code:create-release.yml
- name: Create release
uses: softprops/action-gh-release@v1
with:
token: ${{ secrets.GITHUB_TOKEN }}
name: ${{ github.event.pull_request.title }}
tag_name: ${{ github.event.pull_request.title }}
body: ${{ github.event.pull_request.body }}
files: ./dist/*
draft: false
prerelease: false
tokenでsecrets.GITHUB_TOKENを渡す
前述のpermissionの指定がおかしいとここでエラーを吐くので注意(1敗)
リリース関係しかいじらないので、contentsにwrite権限を持たせるだけで大抵は事足りると思う
nameはリリースの名前を入れる
今回はプルリクエストの名前をそのまま流用している
tag_nameはリリースと同時に作成するタグの名前
bodyはリリースの本文
プルリクエスト作成時の本文をそのまま流用している
filesはassetに入れるファイル
glob(ワイルドカード)で指定可
複数指定する場合は複数行(改行区切り)で書く
draftとprereleaseは使用しないので明示的にfalseに設定してある
とはいえデフォルト値がfalseなので、別に書かなくても同じ
softprops/action-gh-releaseでrelaeaseを作っている?
GitHub Actionsで井戸端プロジェクトのバックアップを取得しReleaseに登録するではncipollo/release-actionを使ってたなtakker.icon